from PIL.ImageFont import ImageFont
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from .models import *
# Create your views here.

""" 员工列表处理函数"""
def emplist_view(request):
    # objects管理器对象，用于模型对象和数据库对象的交互，每一个类都会默认的生成这个属性
    # 这个属性all()返回一个结果集对象，就是数据库中的所有条数
    # <QuerySet [<Emp: Emp object (1)>, <Emp: Emp object (2)>, <Emp: Emp object (3)>, <Emp: Emp object (4)>...]>
    #render是加载模板的一种方式

    emps = Emp.objects.all()

    # print('a',emps)
    # print('type(a)',type(emps))
    return render(request,"emplist.html",{'emps':emps})


'''
添加员工页面函数
'''
def toaddEmp_views(request):
    return render(request,"addEmp.html")

'''
处理添加员工薪水功能函数，接收post功能
'''
def addEmp_views(request):
    # 获取表单中传过来的post请求，有三个属性
    name = request.POST['name']
    salary = request.POST['salary']
    job = request.POST['job']
    # 创建成字典
    # dic = {'name':name,'salary':salary,'job':job}
    # # 字典关键字传参
    # emp = Emp(**dic)
    # 创建出员工对象，与models里面的类属性一致
    emp = Emp(name=name,salary=salary,job=job)
    emp.save()
    # 重定向，响应到前端的一个地址，前端会拿这个地址重新发送请求
    return HttpResponseRedirect("/emp/list/")

'''
逻辑删除员工函数
'''
def del_views(request,id):
    # 做一个只要进行登录了之后才能进行增删改
    user = request.session.get('user')
    if user:
        # print(id)
        # 获取转过来的id，返回的是一个员工对象
        emp = Emp.objects.get(id=id)
        # (或者可以直接从数据库完全删除)emp.delete()
        # 修改状态，逻辑删除
        emp.status = 0
        emp.save()
        return HttpResponseRedirect("/emp/list/")
    else:
        return HttpResponseRedirect('/emp/tologin/')

'''
修改员工
'''
def to_update_views(request,id):
    user = request.session.get('user')
    if user:
        # 获取修改员工的id，返回员工信息对象，将对象值传给修改页面，好显示要修改员工的信息
        emp = Emp.objects.get(id=id)
        return render(request,"updateEmp.html",locals())
    else:
        return HttpResponseRedirect('/emp/tologin/')
'''
修改操作函数
'''
def update_views(request):
    user = request.session.get('user')
    if user:
        # 获取修改人的id
        emp = Emp.objects.get(id=request.POST['id'])

        # 获取修改的信息
        name = request.POST['name']
        salary = request.POST['salary']
        job = request.POST['job']
        # print(name,salary,job)

        # 通过获取修改id的对象修改信息值
        emp.name = name
        emp.salary = float(salary)
        emp.job = job
        emp.save()
        return HttpResponseRedirect("/emp/list/")
    else:
        return HttpResponseRedirect('/emp/tologin/')


'''
登录
'''
def tologin_views(request):

    # # 使用cookie,如果访问tologin时，cookie有值那么就重定向到list页面
    # username = request.COOKIES.get('username')
    # # 如果username有cookie值
    # if username:
    #     return HttpResponseRedirect('/emp/list/')

    #使用session，去获取session对象,存放在服务器
    #这是一个json字符串，不为空的情况下要进行反序列化
    user_json = request.session.get('user')
    if user_json:
        print('before-------------',user_json)
        # json.loads是反序列化，得到user对象
        user = json.loads(user_json)
        print('after--------------',user)
        return HttpResponseRedirect("/emp/list/")
    #没值就重定向到login页面
    return render(request,"login.html")

def login_views(request):
    # logins = Emp_user.objects.all()
    # for l in logins:
    #     if  l.username == request.POST['username'] and l.passwd == request.POST['pwd']:
    #         return HttpResponseRedirect("/emp/list/")
    # return HttpResponseRedirect("/emp/tologin/")

    #使用cookie方法1
    # 登录成功
    emp_user = Emp_user.objects.filter(username=request.POST['username'],passwd=request.POST['pwd'])
    if emp_user:
        response = HttpResponseRedirect("/emp/list/")
        response.set_cookie('username', emp_user[0], max_age=30)
        return response
    else:
        return HttpResponseRedirect("/emp/tologin/")

    #使用cookie我方法2
    # for l in logins:
    #     if l.username == request.POST['username'] and l.passwd == request.POST['pwd']:
    #         # 使用cookie
    #         username = request.COOKIES.get('username')
    #
    #         #如果num为空那么就是第一次设置cookie值
    #         if not username:
    #             username = request.POST['username']
    #         #存入cookie
    #         response = HttpResponseRedirect("/emp/list/")
    #         response.set_cookie('username',username,max_age=30)
    #         return response
    # #登录失败
    # return HttpResponseRedirect("/emp/tologin")



# 使用session
import json
def login_views2(request):
    # 登录成功
    emp_user = Emp_user.objects.filter(username=request.POST['username'], passwd=request.POST['pwd'])
    if emp_user:
       #  将集合中的第一个元素存入session
       # request.session['user'] = emp_user[0]
       # 将user对象序列化成json字符串，以字典的形式序列化
       dic = {'username':emp_user[0].username,'realname':emp_user[0].realname,
              'passwd':emp_user[0].passwd,'gender':emp_user[0].gender}
       # json.dumps将字典的形式转换成json字符串形式
       user_json = json.dumps(dic)
       request.session['user'] = user_json
       #session存活时间以秒为单位
       # request.session.set_expiry(30)
       return HttpResponseRedirect("/emp/list/")
    else:
        return HttpResponseRedirect("/emp/tologin/")

'''
注册
'''
def toregist_views(request):
    return render(request,"regist.html")

def regist_views(request):
    username = request.POST['username']
    realname = request.POST['realname']
    passwd = request.POST['pwd']
    if request.POST['sex'] == 'm':
        gender = '男'
    else:
        gender = '女'
    emp_user = Emp_user(username=username,realname=realname,passwd=passwd,gender=gender)
    emp_user.save()
    return HttpResponseRedirect("/emp/tologin/")


'''
验证码的生成,使用python中的库Image，生成一个图片，最终以二进制的形式响应到前端
响应到前端之前，使用画笔对象，画一些字符当作验证码，同时画一些干扰线
'''
from PIL import Image,ImageDraw,ImageFont
import random
from io import BytesIO
def code_views(request ,time):
    #创建图片对象，参数代表图片模式、大小、颜色
    img = Image.new('RGB',
                    (68,30),
                    (random.randint(0,255),random.randint(0,255),random.randint(0,255))
                    )
    #绘制图片,返回一个画笔对象
    draw = ImageDraw.Draw(img)
    #为随机取文本准备的字符串
    str = 'abcd1234efghijkr987650mnopqrstuvwxyz'
    code = ''
    #生成验证码，画验证码
    for i in range(4):
        random_char = random.choice(str)
        draw.text((i*15+8, i*3),
                  random_char,
                  (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)),
                  font=ImageFont.truetype('arial.ttf', 20))  # 画文本参数，位置，文本，颜色
        code += random_char
    # print(code)
    request.session['code'] = code

    # draw.line((50, 50, 350, 250), fill="black", width=2) #画线,参数：位置，颜色，宽度
    # draw.point() #画点
    # draw.rectangle() #画矩形
    # draw.ellipse() #画椭圆

    # f 是一个对象用于进行二进制处理
    f = BytesIO()
    #将图片以二进制的形式保存
    img.save(f,'png')
    #从内存中读出
    data = f.getvalue()
    return HttpResponse(data)

def test_views(request):
    return HttpResponse('hello你好。。。。。。。。。')


def check_views(request,number):
    # 获得session
    code = request.session.get('code')
    if code == number:
        return HttpResponse('success')
    else:
        return HttpResponse('failed')


